package com.model;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.common.BaseModel;

@SuppressWarnings("serial")
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Acuerdo extends BaseModel {

	@Id
	@SequenceGenerator(name = "id", sequenceName = "AcuerdosSEQ")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
	@Column(unique = true)
	private Long id;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "proveedorID")
	private Proveedor proveedor;

	@Basic
	private Date fechaDesde;

	@Basic
	private Date fechaHasta;

	@Basic
	private Boolean descuentoPorMontoTotal;

	@Column(precision = 20, scale = 2)
	private BigDecimal monto;

	@Column(precision = 20, scale = 2)
	private Double descuento;

	@OneToMany(orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "acuerdoID")
	private List<AcuerdoDetalle> listaAcuerdoDetalle;

	public Acuerdo(Long id, Proveedor proveedor, Date fechaDesde,
			Date fechaHasta, Boolean descuentoPorMontoTotal, BigDecimal monto,
			Double descuento, List<AcuerdoDetalle> listaAcuerdoDetalle) {
		super();
		this.id = id;
		this.proveedor = proveedor;
		this.fechaDesde = fechaDesde;
		this.fechaHasta = fechaHasta;
		this.descuentoPorMontoTotal = descuentoPorMontoTotal;
		this.monto = monto;
		this.descuento = descuento;
		this.listaAcuerdoDetalle = listaAcuerdoDetalle;
	}

	public Acuerdo() {
		this(null, null, null, null, Boolean.FALSE, null, null, null);
	}

	@Override
	public Long getID() {
		return id;
	}

	@Override
	public void setID(Long id) {
		this.id = id;
	}

	public Date getFechaDesde() {
		return fechaDesde;
	}

	public void setFechaDesde(Date fechaDesde) {
		this.fechaDesde = fechaDesde;
	}

	public Date getFechaHasta() {
		return fechaHasta;
	}

	public void setFechaHasta(Date fechaHasta) {
		this.fechaHasta = fechaHasta;
	}

	public Boolean getDescuentoPorMontoTotal() {
		return descuentoPorMontoTotal;
	}

	public void setDescuentoPorMontoTotal(Boolean descuentoPorMontoTotal) {
		this.descuentoPorMontoTotal = descuentoPorMontoTotal;
	}

	public BigDecimal getMonto() {
		return monto;
	}

	public void setMonto(BigDecimal monto) {
		this.monto = monto;
	}

	public Double getDescuento() {
		return descuento;
	}

	public void setDescuento(Double descuento) {
		this.descuento = descuento;
	}

	public List<AcuerdoDetalle> getListaAcuerdoDetalle() {
		return listaAcuerdoDetalle;
	}

	public void setListaAcuerdoDetalle(List<AcuerdoDetalle> listaAcuerdoDetalle) {
		this.listaAcuerdoDetalle = listaAcuerdoDetalle;
	}

	public Proveedor getProveedor() {
		return proveedor;
	}

	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}

}
